home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 129_01 / 210ctdl.c < prev    next >
Text File  |  1985-03-09  |  22KB  |  861 lines

  1. /************************************************************************/
  2. /*                ctdl.c                    */
  3. /*        Command-interpreter code for Citadel            */
  4. /************************************************************************/
  5. #include <210ctdl.h>
  6. /************************************************************************/
  7. /*                history                 */
  8. /*                                    */
  9. /* 84Dec28 HAW    doAide modified to list deleted rooms.            */
  10. /* 84Dec21 HAW    doHelp fixed so that LONG filenames don't bomb system.    */
  11. /* 84Dec12 HAW    Fixed kill acct. bug that made killed acct. the user.    */
  12. /* 84Aug23 HAW & JLS  JLS's Forget scheme implemented.            */
  13. /* 84JuL12 HAW & JLS  <S>kip implemented.                */
  14. /* 84JuL06 HAW    ALL FILES: make putChar the bottleneck!         */
  15. /* 84Jun26 JLS & HAW  Commented out extra params to putRoom & getRoom.    */
  16. /* 84Jun21 JLS    Fix ".Read" so can't have endless "reverse forward..."    */
  17. /* 84Jun10 JLS    Implement "user must log in to create room."        */
  18. /* 84Jun10 JLS    Mod for changing date from other than system console.    */
  19. /* 84May18 JLS/HAW Greeting modified for coherency.            */
  20. /* 84Apr04 HAW    Upgrade to BDS 1.50a begun.                */
  21. /* 83Mar08 CrT    Aide-special functions installed & tested...        */
  22. /* 83Feb24 CrT/SB Menus rearranged.                    */
  23. /* 82Dec06 CrT    2.00 release.                        */
  24. /* 82Nov05 CrT    removed main() from room2.c and split into sub-fn()s    */
  25. /************************************************************************/
  26.  
  27. /************************************************************************/
  28. /*                Contents                */
  29. /*                                    */
  30. /*    doAide()        handles Aide-only commands        */
  31. /*    doChat()        handles C(hat)        command     */
  32. /*    doEnter()        handles E(nter)     command     */
  33. /*    doForget()        handles Z(Forget room)    command     */
  34. /*    doGoto()        handles G(oto)        command     */
  35. /*    doHelp()        handles H(elp)        command     */
  36. /*    doKnown()        handles K(nown rooms)    command     */
  37. /*    doLogin()        handles L(ogin)     command     */
  38. /*    doLogout()        handles T(erminate)    command     */
  39. /*    doRead()        handles R(ead)        command     */
  40. /*    doRegular()        fanout for above commands        */
  41. /*    doSkip()        handles S(kip)        command     */
  42. /*    doSysop()        handles sysop-only commands        */
  43. /*    getCommand()        prints prompt and gets command char    */
  44. /*    greeting()        System-entry blurb etc            */
  45. /*    main()            has the central menu code        */
  46. /************************************************************************/
  47.  
  48. /************************************************************************/
  49. /*    doAide() handles the aide-only menu                */
  50. /*        return FALSE to fall invisibly into default error msg    */
  51. /************************************************************************/
  52. char doAide(moreYet, first)
  53. char moreYet;
  54. char first;    /* first parameter if TRUE        */
  55. {
  56.     char oldName[NAMESIZE];
  57.     int  rm;
  58.  
  59.     if (!aide)     return FALSE;
  60.  
  61.     if (moreYet)   first = '\0';
  62.  
  63.     mprintf("ide special fn: ");
  64.  
  65.     if (first)       oChar(first);
  66.  
  67.     switch (toUpper(   first ? first : iChar()      )) {
  68.     case 'D':
  69.     sprintf(msgBuf.mbtext,
  70.        "The following empty rooms deleted by %s: ", logBuf.lbname);
  71.     mPrintf("elete empty rooms\n ");
  72.     strCpy(oldName, roomBuf.rbname);
  73.     indexRooms();
  74.  
  75.     if ((rm=roomExist(oldName)) != ERROR)    getRoom(rm);
  76.     else                    getRoom(LOBBY);
  77.  
  78.     aideMessage( /* noteDeletedMessage== */ FALSE );
  79.     break;
  80.     case 'E':
  81.     mprintf("dit room\n  \n");
  82.     strCpy(oldName, roomBuf.rbname);
  83.     if (!renameRoom())   break;
  84.     sPrintf(
  85.         msgBuf.mbtext,
  86.         "%s> edited to %s> by %s",
  87.         oldName,
  88.         roomBuf.rbname,
  89.         logBuf.lbname
  90.     );
  91.     aideMessage( /* noteDeletedMessage == */ FALSE);
  92.     break;
  93.     case 'S':
  94.     mprintf("et Date\n ");
  95.     changedate();
  96.     break;
  97.     case 'I':
  98.     mPrintf("nsert message\n ");
  99.     if (
  100.         thisRoom   == AIDEROOM
  101.         ||
  102.         pulledMLoc == ERROR
  103.     )   {
  104.         mPrintf("nope!");
  105.         break;
  106.     }
  107.     note2Message(pulledMId, pulledMLoc);
  108.     putRoom(thisRoom);
  109.     noteRoom();
  110.     sPrintf(
  111.         msgBuf.mbtext,
  112.         "Following message inserted in %s> by %s",
  113.         roomBuf.rbname,
  114.         logBuf.lbname
  115.     );
  116.     aideMessage( /* noteDeletedMessage == */ TRUE);
  117.     break;
  118.     case 'K':
  119.     mPrintf("ill room\n ");
  120.     if (
  121.         thisRoom == LOBBY
  122.         ||
  123.         thisRoom == MAILROOM
  124.         ||
  125.         thisRoom == AIDEROOM
  126.     ) {
  127.         mPrintf(" not here!");
  128.         break;
  129.     }
  130.     if (!getYesNo("confirm"))   break;
  131.  
  132.     sPrintf(
  133.         msgBuf.mbtext,
  134.         "%s> killed by %s",
  135.         roomBuf.rbname,
  136.         logBuf.lbname
  137.     );
  138.     aideMessage( /* noteDeletedMessage == */ FALSE);
  139.  
  140.     roomBuf.rbflags ^= INUSE;
  141.     putRoom(thisRoom);
  142.     noteRoom();
  143.     getRoom(LOBBY);
  144.     break;
  145.     case '?':
  146.     tutorial("aide.mnu");
  147.     break;
  148.     default:
  149.     if (!expert)    mprintf(" ?(Type '?' for menu)\n "    );
  150.     else        mprintf(" ?\n "             );
  151.     break;
  152.     }
  153.     return TRUE;
  154. }
  155.  
  156. /************************************************************************/
  157. /*    doChat()                            */
  158. /************************************************************************/
  159. doChat(moreYet, first)
  160. char moreYet;    /* TRUE to accept folliwng parameters    */
  161. char first;    /* first parameter if TRUE        */
  162. {
  163.     if (moreYet)   first = '\0';
  164.  
  165.     if (first)       oChar(first);
  166.  
  167.     mPrintf("hat ");
  168.  
  169.     if (noChat)   {
  170.     tutorial("nochat.blb");
  171.     return;
  172.     }
  173.  
  174.     if (whichIO == MODEM)    ringSysop();
  175.     else            interact() ;
  176. }
  177.  
  178. /************************************************************************/
  179. /*    doEnter() handles E(nter) command                */
  180. /************************************************************************/
  181. doEnter(moreYet, first)
  182. char moreYet;    /* TRUE to accept following parameters    */
  183. char first;    /* first parameter if TRUE        */
  184. {
  185. #define CONFIGURATION    0
  186. #define MESSAGE     1
  187. #define PASSWORD    2
  188. #define ROOM        3
  189. #define FILE        4
  190.     char what;            /* one of above five */
  191.     char abort, done, WC;
  192.     char iChar(), toUpper();
  193.  
  194.  
  195.     if (moreYet)   first = '\0';
  196.  
  197.     abort    = FALSE  ;
  198.     done    = FALSE  ;
  199.     WC        = FALSE  ;
  200.     what    = MESSAGE;
  201.  
  202.     mprintf("nter ");
  203.  
  204.     if (!loggedIn  &&  !unlogLoginOk  &&  thisRoom!=MAILROOM)    {
  205.     mprintf("--Must log in to enter (except in Mail>)\n ");
  206.     return;
  207.     }
  208.  
  209.     if (first)       oChar(first);
  210.  
  211.     do    {
  212.     outFlag = OUTOK;
  213.  
  214.     switch (toUpper(   first ? first : iChar()   )) {
  215.     case '\r':
  216.     case '\n':
  217.         moreYet    = FALSE;
  218.         break;
  219.     case 'F':
  220.         if (roomBuf.rbflags & CPMDIR) {
  221.         mprintf("ile upload ");
  222.         what    = FILE;
  223.         done    = TRUE;
  224.         break;
  225.         }
  226.     default:
  227.         mprintf("? ");
  228.         abort    = TRUE;
  229.         if (expert)  break;
  230.     case '?':
  231.         tutorial("entopt.mnu");
  232.         abort    = TRUE;
  233.         break;
  234.     case 'C':
  235.         mprintf("onfiguration ");
  236.         what    = CONFIGURATION;
  237.         done    = TRUE;
  238.         break;
  239.     case 'F':
  240.         mprintf("ile upload "    );
  241.         WC        = TRUE;
  242.         done    = TRUE;
  243.         break;
  244.     case 'M':
  245.         mprintf("essage "       );
  246.         what    = MESSAGE;
  247.         done    = TRUE;
  248.         break;
  249.     case 'P':
  250.         mprintf("assword "       );
  251.         what    = PASSWORD     ;
  252.         done    = TRUE;
  253.         break;
  254.     case 'R':
  255.         mprintf("oom "       );
  256.         if (!nonAideRoomOk && !aide)   {
  257.         mPrintf(" ?-- must be aide to create room\n ");
  258.         abort    = TRUE;
  259.         break;
  260.         }
  261.         if (!loggedIn) {
  262.         mprintf("!Must log in to create a new room\n");
  263.         abort = TRUE;
  264.         break;
  265.         }
  266.         what    = ROOM;
  267.         done    = TRUE;
  268.         break;
  269.     }
  270.     first = '\0';
  271.     } while (!done && moreYet && !abort);
  272.  
  273.     doCR();
  274.  
  275.     if (!abort) {
  276.     if (whichIO != CONSOLE && thisRoom == MAILROOM) echo = CALLER;
  277.     switch (what) {
  278.     case CONFIGURATION  :    configure()       ;       break;
  279.     case MESSAGE        :    makeMessage(WC, 0) ;       break;
  280.     case PASSWORD        :    newPW()        ;       break;
  281.     case ROOM        :    makeRoom()       ;       break;
  282.     case FILE        :    upLoad()       ;       break;
  283.     }
  284.     echo = BOTH;
  285.     }
  286. }
  287.  
  288. /************************************************************************/
  289. /*    doForget() handles (Forget room) command            */
  290. /************************************************************************/
  291. doForget(expand, first)
  292. char expand, first;
  293. {
  294.     int i;
  295.  
  296.     if (!expand) {
  297.     mPrintf("\bForget %s \n ", roomBuf.rbname);
  298.     if (thisRoom == LOBBY     ||
  299.         thisRoom == MAILROOM ||
  300.         thisRoom == AIDEROOM) {
  301.         mPrintf("!Can't forget this room! \n ");
  302.         return ;
  303.     }